package com.gexin.model.system;

import java.util.Map;

/**
 * 权限校验类
 * @author 肖得明
 */
public class RoleCheck {
	public static enum CheckType {
		/** 权限Id判断 */
		id
		/** 用户Id判断 */
		, user_id
		/** 权限组代码 */
		, code,
		/** 资源的地址 */
		url
	}

	public static void main(String[] args) {
		System.err.println(CheckType.id);
	}

	/**
	 * 用户权限判断
	 * 
	 * @param user_id  登录的用户Id
	 * @param type
	 *            校验类型 id(权限Id判断), user_id(用户Id判断),url(资源的地址),code(权限组代码)
	 * @param value
	 *            校验值 多个用逗号隔开
	 * @return true 表示有权限 false 表示没有权限 超级管理员用id为1的时候 统一放行
	 */
	public static boolean check(Integer user_id, CheckType type, String value) {
		return check(user_id, type.toString(), value);
	}

	/**
	 * 用户权限判断
	 * 
	 * @param user_id  登录的用户Id
	 * @param type
	 *            校验类型 id(权限Id判断), user_id(用户Id判断),url(资源的地址),code(权限组代码)
	 * @param value
	 *            校验值 多个用逗号隔开
	 * @return true 表示有权限 false 表示没有权限 超级管理员用id为1的时候 统一放行
	 */
	public static boolean check(Integer user_id, String type, String value) {
		Map<String, String> check_map = null;
		Boolean is_checkok = false;
		if (type.equals("id")) {
			// 角色ID判断
			check_map = RoleKit.getUserRolId(user_id);
		} else if (type.equals("code")) {
			// 权限组代码判断
			check_map = RoleKit.getUserRolCode(user_id);
		} else if (type.equals("url")) {
			// 地址判断
			check_map = RoleKit.getRolMap(user_id);
		} else if (type.equals("user_id")) {
			// 用户ID走的逻辑
			String sp[] = value.split(",");
			String user_id_str = user_id.toString();
			for (String str : sp) {
				if (user_id_str.equals(str)) {
					is_checkok = true;
					break;
				}
			}
		}
		// 开始验证用户权限
		if (check_map != null) {
			String sp[] = value.split(",");
			for (String str : sp) {
				if (check_map.containsKey(str)) {
					is_checkok = true;
					break;
				}
			}
		}
		if (is_checkok == true || user_id == 1) {
			return true;
		}
		return false;

	}
}
